package com.design.patterns.principle.dependenceinversionprinciple.violate;

/**
 * 违反依赖倒转原则示例
 *
 *
 *
 * @author Wangzhiwen
 */
public class ViolateDependenceInversionPrinciple {

    public static void main(String[] args) {
        // 原始场景
        Person person = new Person();
        person.receiveEmail(new Email());
        // 需要扩展QQ消息时的变更
        person.receiveQQ(new QQ());
    }

}

/**
 * 原始场景：人接受邮件消息
 * 需求变更：也需要接受QQ消息
 * 实现方法：1、增加QQ消息类
 *         2、在person中增加方法接受QQ消息
 * 优点：1、简单，容易想到
 * 缺点：1、Person直接依赖具体消息类，耦合度高不利于扩展。
 *      2、当场景需求变更时，需要修改主逻辑的代码。
 */
class Person{
    // 接受email信息
    public void receiveEmail(Email email){
        email.info();
    }

    public void receiveQQ(QQ qq){
        qq.info();
    }
}

class Email{

    public void info(){
        System.out.println("Email--信息");
    }

}

class QQ{
    public void info(){
        System.out.println("QQ--信息");
    }
}
